package com.company.ljh.medium;

/**
 * @description:
 * 1318.给你三个正整数 a、b 和 c。
 *
 * 你可以对 a 和 b 的二进制表示进行位翻转操作，返回能够使按位或运算   a OR b == c  成立的最小翻转次数。
 *
 * 「位翻转操作」是指将一个数的二进制表示任何单个位上的 1 变成 0 或者 0 变成 1 。
 * @projectName:leet_code
 * @see:com.company.ljh.medium
 * @author:ljh
 * @createTime:2024/2/19 22:26
 * @version:1.0
 */
public class 或运算的最小翻转次数 {
    public int minFlips(int a, int b, int c) {
        int result = 0;
        //用于检查当前位是否为0
        int num = 1;
        while(b != 0 || a != 0 || c != 0){
            if((num & c) != (num & (a | b))){
                if((num & c) == 1){
                    result++;
                }else{
                    result = result + (num & a) + (num & b);
                }
            }
            c = c >> 1;
            b = b >> 1;
            a = a >> 1;
        }
        return result;
    }
}
